package com.gqs.bookstore.dao.impl;

import java.sql.SQLException;
import java.util.Date;
import java.util.List;
import java.util.Map;

import com.gqs.bookstore.dao.BaseDao;
import com.gqs.bookstore.dao.UserDao;
import com.gqs.bookstore.vo.Users;

public class UserDaoImpl extends BaseDao implements UserDao {

	@Override
	public Users save(Users users) throws SQLException {
		//这里进行增加业务，实际上是注册，所以不存在存入【上一次登录时间】的操作
		//业务逻辑层进行处理后得到Salt和Password_digist并将它们set进users对象里，最终传到数据库里
		//存储是将数据先封装放到user对象里[2种方式：@1-参数传递	@2-set进去]，然后才将user对象里的数据get进sql语句里即传到数据库里进行相应功能
		String sql = "insert into users"
					+ "(nikename,account,password_digist,salt,phone,create_at,update_at) values"
					+ "(?,?,?,?,?,?,?)";
		Object[] params = {users.getNikename(),users.getAccount(),users.getPassword_digist(),
						   users.getSalt(),users.getPhone(),users.getCreateAt(),users.getUpdateAt()};
		Long id = super.GetGenerateIncreaseId(sql, params);
		users.setId(id);//将id set进user中将得到完整的user
		super.closeConnection();
		return users;//得到具有主键的完整users对象----这里user变化了，中间将数据get进数据库里，然后再将id set进user里，最后再返回user
	}
	
	
	/**
	 * 这里是按账号查找【单查】，实际上是做用户登录的验证，即要保证用户账号的唯一性
	 * @throws SQLException 
	 */
	@Override
	public Users findByAccount(String account) throws SQLException {
		Users users = null;
		String sql = "select * from users where account=?";
		Object[] params = {account};
		List<Map<String, Object>> list = super.executeQuery(sql, params);
		//if(list.size()>0){//都可以
		  if(!list.isEmpty()){
			Map<String, Object> record = list.get(0);
			if(record != null){
				users  =new Users();//这里的key是要和数据库里的字段名要一致
				//users.setId((Long) record.get("id"));这样写不对，在测试用例进行Auth测试时会报错
				Integer id = (Integer) record.get("id");
				users.setId(new Long(id));
				
				users.setNikename((String) record.get("nikename"));
				users.setAccount((String) record.get("account"));
				users.setPassword_digist((String) record.get("password_digist"));
				users.setSalt((String) record.get("salt"));
				users.setPhone((String) record.get("phone"));
				users.setLast_login_time((Date) record.get("last_login_time"));
				users.setCreateAt((Date) record.get("createAt"));
				users.setUpdateAt((Date) record.get("updateAt"));
			}
			
		}
		  super.closeConnection();
		return users;
	}
	
	
	/**
	 * 修改
	 * @throws SQLException 
	 */
	@Override
	public void modify(Users users) throws SQLException {
		if(users == null){
			return;
		}
		String sql = "update users set last_login_time=?,update_at=? where id=?";
		Object[] params = {users.getLast_login_time(),users.getUpdateAt(),users.getId()};
		super.executeUpdate(sql, params);
		super.closeConnection();
		//这里users没变化，中间仅仅只是将数据get进数据库里
	}

}
